package stackAndQueue.q3_recursionStack;

import java.util.Stack;

/**
 * Project：algorithm
 * Date：2024/6/4
 * Time：20:03
 * Description：使用递归函数将一个栈逆序，只能使用本栈，不能使用其他数据结构
 * 解法：设计两个递归，一个递归用于将栈低的元素返回并移除，另外一个递归用于放入每次取出的栈底数据到本栈
 *
 * @author Cao Jiwen
 * @version 1.0
 */
public class RecursionStack {

    /**
     * @param stack 要移除元素的栈
     * @return 栈底元素
     */
    private static int getAndRemoveLastElement(Stack<Integer> stack){
        int res = stack.pop();
        if (stack.isEmpty()){
            return res;
        } else {
            int last = getAndRemoveLastElement(stack);
            stack.push(res);
            return last;
        }
    }

    /**
     * @param stack 放入
     */
    public static void reverse(Stack<Integer> stack){
        if (stack.isEmpty()){
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        stack.push(i);
    }

}
